home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 1997 December / PC Pro December 1997 CD-Rom coverdisc.iso / symantec / dbAnywh / JAVA.BIN / CLASSES.ZIP / sun / tools / tree / CatchStatement.class (.txt) < prev    next >
Encoding:
Java Class File  |  1996-12-14  |  4.1 KB  |  109 lines

  1. package sun.tools.tree;
  2.  
  3. import java.io.PrintStream;
  4. import java.util.Hashtable;
  5. import sun.tools.asm.Assembler;
  6. import sun.tools.asm.LocalVariable;
  7. import sun.tools.java.ClassDefinition;
  8. import sun.tools.java.ClassNotFound;
  9. import sun.tools.java.Constants;
  10. import sun.tools.java.Environment;
  11. import sun.tools.java.Identifier;
  12. import sun.tools.java.Type;
  13.  
  14. public class CatchStatement extends Statement {
  15.    Expression texpr;
  16.    // $FF: renamed from: id sun.tools.java.Identifier
  17.    Identifier field_0;
  18.    Statement body;
  19.    LocalField field;
  20.  
  21.    public CatchStatement(int var1, Expression var2, Identifier var3, Statement var4) {
  22.       super(102, var1);
  23.       this.texpr = var2;
  24.       this.field_0 = var3;
  25.       this.body = var4;
  26.    }
  27.  
  28.    long check(Environment var1, Context var2, long var3, Hashtable var5) {
  29.       var3 = ((Statement)this).reach(var1, var3);
  30.       var2 = new Context(var2, this);
  31.       Type var6 = this.texpr.toType(var1, var2);
  32.  
  33.       try {
  34.          var1.resolve(super.where, var2.field.getClassDefinition(), var6);
  35.          if (var2.getLocalField(this.field_0) != null) {
  36.             var1.error(super.where, "local.redefined", this.field_0);
  37.          }
  38.  
  39.          if (!var6.isType(13)) {
  40.             if (!var6.isType(10)) {
  41.                var1.error(super.where, "catch.not.throwable", var6);
  42.             } else {
  43.                ClassDefinition var7 = var1.getClassDefinition(var6);
  44.                if (!var7.subClassOf(var1, var1.getClassDeclaration(Constants.idJavaLangThrowable))) {
  45.                   var1.error(super.where, "catch.not.throwable", var7);
  46.                }
  47.             }
  48.          }
  49.  
  50.          this.field = new LocalField(super.where, var2.field.getClassDefinition(), 0, var6, this.field_0);
  51.          var2.declare(var1, this.field);
  52.          var3 |= 1L << this.field.number;
  53.          return this.body.check(var1, var2, var3, var5);
  54.       } catch (ClassNotFound var8) {
  55.          var1.error(super.where, "class.not.found", var8.name, Constants.opNames[super.op]);
  56.          return var3;
  57.       }
  58.    }
  59.  
  60.    public Statement inline(Environment var1, Context var2) {
  61.       var2 = new Context(var2, this);
  62.       if (this.field.isUsed()) {
  63.          var2.declare(var1, this.field);
  64.       }
  65.  
  66.       if (this.body != null) {
  67.          this.body = this.body.inline(var1, var2);
  68.       }
  69.  
  70.       return this;
  71.    }
  72.  
  73.    public Statement copyInline(Context var1, boolean var2) {
  74.       CatchStatement var3 = (CatchStatement)((Node)this).clone();
  75.       if (this.body != null) {
  76.          var3.body = this.body.copyInline(var1, var2);
  77.       }
  78.  
  79.       return var3;
  80.    }
  81.  
  82.    public void code(Environment var1, Context var2, Assembler var3) {
  83.       CodeContext var4 = new CodeContext(var2, this);
  84.       if (this.field.isUsed()) {
  85.          ((Context)var4).declare(var1, this.field);
  86.          var3.add(super.where, 58, new LocalVariable(this.field, this.field.number));
  87.       } else {
  88.          var3.add(super.where, 87);
  89.       }
  90.  
  91.       if (this.body != null) {
  92.          this.body.code(var1, var4, var3);
  93.       }
  94.  
  95.    }
  96.  
  97.    public void print(PrintStream var1, int var2) {
  98.       super.print(var1, var2);
  99.       var1.print("catch (");
  100.       this.texpr.print(var1);
  101.       var1.print(" " + this.field_0 + ") ");
  102.       if (this.body != null) {
  103.          this.body.print(var1, var2);
  104.       } else {
  105.          var1.print("<empty>");
  106.       }
  107.    }
  108. }
  109.